package com.candoit.webapps.pricing.controllers;

//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.HashMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import com.candoit.webapps.pricing.model.Discount;
import com.candoit.webapps.pricing.model.Linea;
import com.candoit.webapps.pricing.util.QueryUtil;


@ManagedBean(name = "dtoCtrl")
@RequestScoped
public class DescuentoController extends AbstractController {
	
	private List<Double> valores;
	private List<Linea> lineas;
	private Map<Double,Map<Linea,Discount>> map;
	
//	private List<LineaUtil> lineas;
//	
//	private Map<String,DescuentoUtil> mapResults;
//	
//	private HtmlPanelGroup panelDescuentos;
	
	private void initLineas(){
		List<Linea> lineas = new ArrayList<Linea>();  
		lineas.add(QueryUtil.getInstance().getLineaByName("Acuario"));
		lineas.add(QueryUtil.getInstance().getLineaByName("Luna"));
		lineas.add(QueryUtil.getInstance().getLineaByName("Centauro"));
		lineas.add(QueryUtil.getInstance().getLineaByName("Orion"));
		lineas.add(QueryUtil.getInstance().getLineaByName("Tierra Artesanal"));
		this.lineas = lineas;
	}
	
	private void initValores(){
		List<Double> valores = new ArrayList<Double>();
		valores.add(3000.);
		valores.add(5000.);
		valores.add(10000.);
		valores.add(15000.);
		valores.add(20000.);
		valores.add(30000.);
		valores.add(50000.);
		valores.add(100000.);
		this.valores = valores;
	}
	
	private void initMap(){
		Map<Double,Map<Linea,Discount>> map = new HashMap<Double,Map<Linea,Discount>>();
		for(Double v : this.valores){
			Map<Linea,Discount> lv = new HashMap<Linea,Discount>();
			for(Linea l : this.lineas){
				Discount d = QueryUtil.getInstance().getDiscountsByValueAndLine(v, l);
				if(d!=null){
					d.setForView(d.getLimit().toString());
				}else{
					d = new Discount();
					d.setValue(v);
					d.setLine(l);
					d.setForView("");
				}
				lv.put(l, d);
			}
			map.put(v, lv);
		}
		this.map = map;
	}
	
	public DescuentoController(){
		super();
		initLineas();
		initValores();
		initMap();
		
	}
	
	public Discount porcentaje(Double value, Linea line){
		Discount d  = null;
		try {
			d = map.get(value).get(line);
		} catch (Exception e) {		}
		return d;
	}
	
	public void saveDiscount(){
		for(Double d : this.map.keySet()){
			for(Linea l : this.map.get(d).keySet()){
				Discount ds = this.map.get(d).get(l);
				_saveDiscount(ds);
			}
		}
	}
	
	private void _saveDiscount(Discount d){
		if(d.getId() != null){
			if(d.getLimit() != null){
				this.update(d);
			}else{
				this.remove(d);
			}
		}else if( d.getLimit() != null){
			this.save(d);
		}
	}
	
//	public HtmlPanelGroup getPanelDescuentos() {
//		if (panelDescuentos == null){
//			this.fillList();
//			this.fillPanel();
//		}
//		return panelDescuentos;
//	}
//
//	public void setPanelDescuentos(HtmlPanelGroup panelDescuentos) {
//		this.panelDescuentos = panelDescuentos;
//	}
//
//	public List<LineaUtil> getLineas() {
//		return lineas;
//	}
//
//	public void setLineas(List<LineaUtil> lineas) {
//		this.lineas = lineas;
//	}
//	
//	public Map<String, DescuentoUtil> getMapResults() {
//		return mapResults;
//	}
//
//	public void setMapResults(Map<String, DescuentoUtil> mapResults) {
//		this.mapResults = mapResults;
//	}
//
//	private void fillList(){
//		List<Linea> lineasList = QueryUtil.getInstance().getLineas();
//		lineas = new ArrayList<LineaUtil>();
//		mapResults = new HashMap<String, DescuentoUtil>();
//		for (Linea linea : lineasList){
//			LineaUtil lineaUtil = new LineaUtil();
//			lineaUtil.setLinea(linea);
//			List<Descuento> descuentos = QueryUtil.getInstance().getDescuentosByLinea(linea);
//			int id = 0;
//			for (Descuento descuento : descuentos){
//				id++;
//				DescuentoUtil util = new DescuentoUtil();
//				util.setId(id);
//				util.setDescuentoLinea(descuento);
//				util.setDescuento(String.valueOf(descuento.getDescuento()));
//				lineaUtil.getDescuentos().add(util);
//				mapResults.put(String.valueOf(linea.getId()) + String.valueOf(id), util);
//			}
////			int restante = 5 - descuentos.size();
////			for (int i = 0; i < restante; i++) {
//			id++;
//			DescuentoUtil util = new DescuentoUtil();
//			Descuento d = new Descuento();
//			DescuentoFK fk = new DescuentoFK();
//			fk.setLinea(linea);
//			d.setFk(fk);
//			util.setId(id);
//			util.setDescuentoLinea(d);
//			util.setDescuento(String.valueOf(d.getDescuento()));
//			lineaUtil.getDescuentos().add(util);
//			mapResults.put(String.valueOf(linea.getId()) + String.valueOf(id), util);
////			}
//			
//			lineas.add(lineaUtil);
//		}
//		
//	}
//	
//	private void fillPanel(){
//		panelDescuentos = new HtmlPanelGroup();
//		for (LineaUtil lineaUtil : lineas){
//			HtmlPanelGrid panelGrid = new HtmlPanelGrid();
//			panelGrid.setColumns(1);
////			panelGrid.setHeaderClass("headingPanelGridDescuento");
////			panelGrid.setColumnClasses("even");
//			HtmlOutputText  lineaOutput = new HtmlOutputText();
//			lineaOutput.setValue(lineaUtil.getLinea().getNombre().toUpperCase());
//			lineaOutput.setStyleClass("outputtextcenter");
//			panelGrid.getChildren().add(lineaOutput);
//			panelGrid.getChildren().add(getHtmlPanelGrid(lineaUtil));
//			panelDescuentos.getChildren().add(panelGrid);
//		}
//	}
//	
//	private HtmlPanelGrid getHtmlPanelGrid(LineaUtil lineaUtil){
//		HtmlPanelGrid panelGrid = new HtmlPanelGrid();
//		String columnClases = "prueba ";
//		
//		panelGrid.setStyle("maintable");
//		panelGrid.setColumnClasses(columnClases);
////		panelGrid.setHeaderClass("prueba");
//		for (DescuentoUtil docUtil : lineaUtil.getDescuentos()){
//			 for (int i = 0; i < lineaUtil.getDescuentos().size(); i++) {
//					columnClases += ", prueba";
//				}
//			 panelGrid.setColumnClasses(columnClases);
//			 panelGrid.setColumns(lineaUtil.getDescuentos().size());
//			 HtmlInputText lineaCantidad = new HtmlInputText();
//			 lineaCantidad.setValueExpression("value", createValueExpression("#{dtoCtrl.getDescuentoById(" +  String.valueOf(lineaUtil.getLinea().getId()) + String.valueOf(docUtil.getId()) +").descuentoLinea.fk.cantidad}",Double.class));
//			 lineaCantidad.setStyleClass("inputtextcantdesc");
//			 lineaCantidad.setSize(5);
//			 lineaCantidad.setStyle("prueba");
//			 panelGrid.getChildren().add(lineaCantidad);
//		}
//		for (DescuentoUtil docUtil : lineaUtil.getDescuentos()){
//			 HtmlInputText lineaCantidad = new HtmlInputText();
//			 for (int i = 0; i < lineaUtil.getDescuentos().size(); i++) {
//					columnClases += ", prueba";
//				}
//			 panelGrid.setColumnClasses(columnClases);
//			panelGrid.setColumns(lineaUtil.getDescuentos().size()); 
//			HtmlInputText lineaDescuento = new HtmlInputText();
//			 lineaDescuento.setValueExpression("value", createValueExpression("#{dtoCtrl.getDescuentoById(" +  String.valueOf(lineaUtil.getLinea().getId()) + String.valueOf(docUtil.getId()) +").descuento}",String.class));
//			 lineaDescuento.setStyleClass("inputtextdescuento");
//			 lineaDescuento.setSize(5);
//			 lineaDescuento.setStyle("prueba");
//			 panelGrid.getChildren().add(lineaDescuento);
//		}
//		
//		return panelGrid;
//	}
//	
//	
//	private ValueExpression createValueExpression(String valueExpression,Class<?> valueType) {
//		 FacesContext facesContext = FacesContext.getCurrentInstance();
//	        return facesContext.getApplication().getExpressionFactory().createValueExpression(
//	                facesContext.getELContext(), valueExpression, valueType);
//	}
//	
//	public DescuentoUtil getDescuentoById(String id ){
//		return mapResults.get(id);
//	}
//	
//	
//	public void saveDescuentos(){
//		for (LineaUtil util :lineas){
//			for (DescuentoUtil docUtil : util.getDescuentos()){
////				mapResults.get(String.valueOf(util.getLinea().getId()) + String.valueOf(docUtil.getId()));
//				if (docUtil.getDescuentoLinea().getFk().getCantidad() > 0.00d) {
//						DescuentoUtil descuento = mapResults.get(String.valueOf(util.getLinea().getId()) + String.valueOf(docUtil.getId()));
//						descuento.getDescuentoLinea().setDescuento(Double.parseDouble(docUtil.getDescuento()));
//						try{
//							this.update(descuento.getDescuentoLinea());
//							System.out.println("Cantidad: " + descuento.getDescuentoLinea().getFk().getCantidad());
//						}catch(Exception e){
//							FacesContext.getCurrentInstance().addMessage("descuentosform:botonguardar", new FacesMessage("Ya existe para la línea " + docUtil.getDescuentoLinea().getFk().getLinea().getNombre() + " el descuento de " + docUtil.getDescuentoLinea().getFk().getCantidad()));
//							return;
//						}  
//				}
//			}
//		}
//		
//		this.fillList();
//		this.fillPanel();
//		FacesContext.getCurrentInstance().renderResponse();
//		try {
//			FacesContext.getCurrentInstance().getExternalContext().redirect("descuentos-linea.jsf");
//		} catch (IOException e) {
//			e.printStackTrace();
//		}	
//		
//		
//	}
//	
//	public void clearData(){
//		this.lineas = null;
//		this.mapResults = null;
//		this.panelDescuentos = null;
//	}
//	
	
	public List<Double> getValores() {
		return valores;
	}

	public void setValores(List<Double> valores) {
		this.valores = valores;
	}

	public List<Linea> getLineas() {
		return lineas;
	}

	public void setLineas(List<Linea> lineas) {
		this.lineas = lineas;
	}
}
